package com.danton.user.service;

import java.util.List;

import com.danton.common.exception.UserAlreadyExistException;
import com.danton.model.BsAdminModel;
import com.danton.model.BsAdminRoleModel;
import com.danton.model.BsPermissionModel;
import com.danton.model.BsRoleModel;
import com.jfinal.aop.Before;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.tx.Tx;

/**
 * 用户业务接口
 * @author sunyuxing
 *
 */
public interface UserService {
	/**
	 * 修改BsAdminModel信息
	 * @param 
	 * @return boolean
	 */
	public boolean UpdateAdmin(BsAdminModel admin);
	/**
	 * 用户关联角色
	 * @param 
	 * @return int
	 */
	public int AddAdminRole(List<BsAdminRoleModel> list);
	
	/**
	 * 通过用户ID查询角色列表
	 * @param admin_id
	 * @return
	 */
	public List<BsRoleModel> findRoleNameByUserID(int admin_id);
	/**
	 * 删除角色用户关联关系
	 * 
	 * @param role_id
	 *            角色id，permission_ids 权限id
	 * @return
	 */
	public boolean deleteUser(int role_id);
	/**
	 * 通过用户名查询用户
	 * @param user_name
	 * @param password
	 * @return
	 */
	public BsAdminModel findByUserName(String user_name);
	
	/**
	 * 通过用户名密码查询用户
	 * @param user_name
	 * @param password
	 * @return
	 */
	public BsAdminModel findByUserNameAndPassword(String user_name, String password);

	/**
	 * 通过用户ID查询角色列表
	 * @param user_id
	 * @return
	 */
	public List<BsRoleModel> findRolesByUserID(int user_id);
	
	/**
	 * 通过用户user_name查询角色列表
	 * @param user_id
	 * @return
	 */
	public List<BsRoleModel> findRolesByUserName(String user_name);

	/**
	 * 通过用户ID查询权限列表
	 * @param user_id
	 * @return
	 */
	public List<BsPermissionModel> findPermissionsByUserID(int user_id);

	/**
	 * 根据角色查找用户
	 * @param role_id
	 * @return
	 */
	public List<BsAdminModel> findUserByRoleID(int role_id);
	/**
	 * 注册用户
	 * @param user_name
	 * @param password
	 * @throws UserAlreadyExistException 用户已经存在
	 */
	@Before(Tx.class)
	public boolean register(BsAdminModel adminModel, String role_code, String access_key_id) throws UserAlreadyExistException;
	
	public boolean checkLoginPermission(String user_name,String access_key_id);
	
	public Page<BsAdminModel> listUser(int pn,int ps);
	
	public Page<BsAdminModel> searchUser(int pn,int ps,String kw);
	
	public boolean edit(BsAdminModel adminModel);
	
	public BsAdminModel findByUserID(int id);
    /*
     * 重置密码
     * */
	public void resetPassword(int user_id);
	/*
     * 修改密码
     * */
	public boolean updatePassword(int user_id,String newpassword);
}
